
import turtle
import random as r

# 设置颜色模型的取值范围是：0～255，默认是0～1.0
# turtle.colormode(255)
# turtle.pencolor(100, 200, 134)
# turtle.circle(100.0)
# turtle.mainloop()


print(11 * 33)

# 除法, 结果一定是float类型
print(2.8 / 2)
# 整除, 并向下取整 -> 2
print(5 // 2)

# 整除, 并向下取整 -> -3
print(-5 // 2)

# 向下取整,int() 在进行类型转换的时候是向下取整的
print(int(2.88))
print(int(3.1))

# 随机数, float
print(r.random())

# 随机整数
print(r.randint(0, 1000))


# 变量值的交换
a = 10
b = 20
c = 30

# 这种赋值其实是先确定了等号右边的值分别是： 30, 10, 20  , 然后再分别赋值给等号左边的变量
a, b, c = c, a, b
print("a:", a, ",b:", b, ",c:", c)


# 原始字符: r或 R 表示原始的字符串，raw
print("adfad\nafadf")
print(r"adfad\nafadf")
print(R"adfad\nafadf")

# 多行编写字符串: \  这里的反斜杠表示的是 将字符串连接在一起
print("AAAAAAAAAAAAAAAAAAAAAAAAAAAA\
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
CCCCCCCCCCCCCCCCCCCCCCCCCCCCC\
DDDDDDDDDDDDDDDDDDDDDDDDDDDD")


# f 和 F:
age = 10
name = "AAA"
print(f"姓名： {name} , 年龄: {age}")
print(F"姓名： {name} , 年龄: {age}")

# r，f
print(f" \t姓名： {name} , 年龄: {age}")
print(rf" \t姓名： {name} , 年龄: {age}")

# % 百分号 输出格式化
s = "名字是: %s , 年龄是: %d" % (name, age)
print(f"{s}")



# 格式化 %02d 用2位表示一个数字，如果宽度不够则用0在左侧补气
hour = 2
mins = 4
secs = 3
print("现在时间是：%02d:%02d:%02d" % (hour, mins, secs))

# 幂运算 ** , python里面是没有 ++(自增) 和 --(自减) 的运算符
print(2 ** 4)


# bool数据类型: 数字：0 为false , 非0为True; 字符串: 空字符串为False, 非空字符串为True
v = True
print(v)
print(bool(0)); print(bool(-0)); print(bool(0.0));  print(bool(""));
print(bool(1)); print(bool("afa")); print(bool(1.23));
print(int(True));print(int(False)); print(float(True));print(float(False));


# if  else ， 流程控制
aa = 81
if aa > 80:
    print("hahahaahha")
else:
    print("ooooooooo")


# not是布尔运算符： not True = False
v = 20
print(f"not: {not v}")


# for 循环
for i in range(10):
    if i == 4:
        continue
    if i > 6:
        break

    print(f"-----I:{i}")


# pass 语句： 其实就是一个占位符
if 20 > 30:
    pass
else:
    pass


# 双重循环中的break 和 continue，只会跳出或继续内层循环
for i in range(20):
    if i == 14 or i == 12:
        continue
    for j in range(3):
        if j == 2:
            break
        print(f"---i:{i} , j: {j}")


# 列表:
aaa = ['aa', 2, True]
print(f"aaa: {aaa}")
print(type(aaa))

bbb = list()
ccc = list(['aa', 11])
print(f"bbb: {bbb}")
print(type(bbb))

ccc.append("234")
ccc.insert(1, "567")  # 在索引为1的前面添加元素"567"
print(f"ccc: {ccc}")
print(f"获取指定元素的索引:{ccc.index('234')}")

# 列表的切片操作
lst1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(f"----lst1: {id(lst1)}")
print(f"----lst1: {lst1[2:6:3]}")
# 逆序
print(lst1[::-1])

# 判断元素是否在list： in ， not in
print(2 not in lst1)  # False

# del lst1  # 删除变量         print(f"---lst1: {lst1}")

lst1.sort(reverse=True) # 会改变原列表
print(f"lst1: {lst1}")
sortedList = sorted(lst1, reverse=False)
print(f"sortedList: {sortedList}")


#  ## 列表生成式
genList = [m for m in range(20)]
genList1 = [m * m for m in range(20)]
print(f"genList: {genList}")
print(f"genList1: {genList1}")



# 字典:{}, 由花括号组成, 例如: {key1:value1, key2:value2}
dic1 = {"name": "aaa", "age": 20}
dic2 = dict(name="aaa" , age=20, grade=3)   # 内置的dict() 类
print(f"dic1:{dic1}")
print(f"dic2:{dic2}")

# 字典中的键的删除
del dic1["name"]   # 删除dic1中的name字段
dic1.clear() # 字典的清空
print(f"dic1:{dic1}")

# 字典的视图
dic3 = dict(name="BBB", age=30, grade=4)
print(f"dic3.keys(): {dic3.keys()}")
print(f"dic3.keys(): {list(dic3.keys())}")  # 将dict_keys 转成list
print(f"dic3.values(): {dic3.values()}")
print(f"dic3.values(): {list(dic3.values())}")   # 将dict_values 转成list
print(f"dic3.items(): {dic3.items()}")
print(f"dic3.items(): {list(dic3.items())}")  # 将dict_items 转成list


# 字典生成式
keys = ["name", "age", "grade"]
values = ["aaa", 20, 4]
dict4 = {key: value for key, value in zip(keys, values)}
print(f"dict4:{dict4}")
zip4 = zip(keys, values)
print(f"zip4:{zip4}")
print(f"dict4:{dict(dict4)}")


# 元组 tuple: ("name" , 20)
tuple1 = ("name", 20, '30')
tuple1 = "name", 20, '60'   # 小括号可以省略
print(f"tuple1: {tuple1}")
tuple2 = tuple(("name", 20, 50))
print(f"tuple2: {tuple2}")
tuple3 = (90, )  # 如果元组中只有一个元素，则最后必须添加一个逗号


# 元组的遍历
print(tuple1[0])
for item in tuple1:
    print(item)


# 集合： 由一对花括号包裹组成， { element1 ,  element2 , element3 ,element4 }, 无序，元素存入集合时会先经过hash来计算其尺寸长出对位置
# 集合中对元素不能重复
set0 = {0, 1, 2, 3, 3, 4, 5} # set 里面对元素是不能重复的
print(f"set0: {set0}")
set1 = {"aaa", 78, 'awer', True}
set2 = set(range(5))
set3 = set(("234",'df',234))
set4 = set(set0)
set5 = set("python")  # set 里面对元素是无序的

print(f"set1: {set1}")
print(f"set2: {set2}")
print(f"set3: {set3}")
print(f"set4: {set4}")
print(f"set5: {set5}")

# 集合 交集，并集，差集， 对称差集
s1 = { 0, 1, 2, 3}
s2 = {3, 4, 5, 6}

print(s1.intersection(s2))  # 交集
print(s1 & s2)  # 交集

print(s1.union(s2))  # 并集
print(s1 | s2)  # 并集

print(s1.difference(s2))  # 差集
print(s1 - s2)  # 差集

print(s1.symmetric_difference(s2))  # 对称差集
print(s1 ^ s2)   # 对称差集


# 集合生成式
s6 = {item for item in range(10)}
print(f"s6: {s6} ")


# 字节
s7 = "aaaa"
b7 = b''

data_hex = bytes.hex(b7)
print(f"---data_hex: {data_hex}")
print(int(data_hex, 16))













